//08290016
#ifndef _DBCLASS_HPP_
#define _DBCLASS_HPP_

#include</usr/include/mysql/mysql.h>
#include<iostream>
#include<string>
#include<cstring>
#include<stdio.h>
#include<vector>
using namespace std;

class dbClass {
public:
	dbClass(bool is_output);
	~dbClass();
	//单独T、R表示发送、接收
	//时间格式为：'1000-01-01 00:00:00'
    string AddUser(string uName, string pwd, string job);	//注册用户并确定job，返回用户id
    uint8_t CheckSignin(string uID,string pwd);	//用户登录，正常返回0，id不存在返回2，密码不对返回3
    uint8_t AlterUserIP(string uID,string ip);	//记录用户ip，下线了记为"0"，正常返回0
    string GetUserIP(string uID);	//获取用户ip，下线了记为"0"
	vector< vector<string> > GetUserList();	//获取全部好友名、ip、job，其中ip包含了在线信息，格式为：[[id,name,ip,job],...]
	string AddChatGroup(string groupName, string userList, string groupCategory);	//添加群聊，userList格式为："id1,id2,...,idn,"
	vector< vector<string> > GetChatGroupList(string myUserID);	//获取含有自己的全部群组，格式为：[[id,name,category,memberList],...]
	vector< vector<string> > GetGroupUserList(string chatGroupID);	//获取群组包含的全部user，格式为：[[id,name,ip,job],...]
	string SaveMessage(string TUserID, string RUserID, string message, string type);	
		//存储一条聊天信息，若为群聊：RUserID为群聊id,type为一字节数字，但以字符传输
	uint8_t SaveUserBeatTime(string userID, string time);	//更新用户心跳包时间
	string GetUserBeatTime(string userID);	//获取用户上次心跳包时间
	//vector< string > GetLastestMessage(string TUserID, string RUserID, string lastMessageID);	
		//获取本用户某聊天或群聊末条未读消息（传入本地最近消息id，若为群聊id为RUserID）
		//返回格式为：[messageID,message,time,type]
	//int GetMessageNum(string TUserID, string RUserID, string time);	
		//获取本用户某聊天或群聊未读消息数（传入上次进入该群聊的时间，若为群聊id为RUserID）
	//vector< vector<string> > GetPieceofMessage(string TUserID, string myUserID, string time);	
	//	//获取某聊天或群聊的某时间点前至多10条未读消息，格式为：[[id,name,messageID,message,time,type],...]
	//vector< vector<string> > GetAllMessage(string TUserID, string myUserID);	
		//获取某聊天或群聊的某时间点前全部未读消息，格式为：[[id,name,messageID,message,time,type],...]
	vector< vector<string> > GetNewMessage(string myUserID, string lastMessageID);	
		//获取某用户的本地数据库最新消息后的消息，传入用户id和其本地最新消息id，没有则返回空vector，格式为：[[Tid,Tname,Rid,messageID,message,time,type],...]
	vector< vector<string> > GetNewUser(string lastUserID);	
		//获取某用户的本地数据库最新user后的user，传入用户id和其本地最大userID，没有则返回空vector，格式为：[[userID,name,ip,job],...]
	vector< vector<string> > GetNewGroup(string myUserID, string lastGroupID);	
		//获取某用户的本地数据库最新group后的group，传入用户id和其本地最大groupID，没有则返回空vector，格式为：[[groupid,name,category,memberList],...]
	//uint8_t DeleteChatGroup(string chatGroupID);	//删除群聊，正常返回0
	//uint8_t DeleteUser(string userID);	//注销用户，正常返回0

	
private:
	MYSQL* SqlConn(MYSQL* sql_conn);
	uint8_t CloseSqlConn(MYSQL* sql_conn);
	string &ClearZero(string &str);
	bool is_chatGroup(string &id);
	MYSQL* sql_conn;
	bool is_output;
	//string i2s(int num);
	//int s2i(string str);
};

#endif